package a00_LeetCode.Tree;

/**
 * @Author quan
 * @Description  根据二叉树创建字符串
 * 给你二叉树的根节点 root ，请你采用前序遍历的方式，将二叉树转化为一个由括号和整数组成的字符串，返回构造出的字符串。
 * 空节点使用一对空括号对 "()" 表示，转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
 * @Date 2023/3/28 14:20
 */
public class Num606_tree2str {
    //创建字符串容器
    StringBuilder sb = new StringBuilder();
    public String tree2str(TreeNode root) {
        //边界条件:该树为null,直接返回空字符串
        if(root == null){
            return "";
        }
        //根——>左——>右：先拼接根节点
        sb.append(root.val);
        //拼接左子树
        if(root.left != null){//当左子树不为空
            sb.append("(");
            tree2str(root.left);//拼接左子树
            sb.append(")");
        }else{//左子树为空
            //只有当右子树存在的时候:给左子树添加空括号
            if(root.right != null){
                sb.append("()");
            }
        }
        //当左子树无论是什么情况，右子树有两种情况：存在或者不存在。
        // 当右子树存在的时候需要拼接，不存在的时候就不用管了，所以这里写右子树存在的情况即可
        if(root.right != null){
            sb.append("(");
            tree2str(root.right);//拼接右子树
            sb.append(")");
        }
        return sb.toString();
    }
}
